module.exports = (options, app) => {
	return async function errHandler(ctx, next) {
		try {
			await next();
			// 404错误
			if (ctx.status === 404 && !ctx.body) {
				ctx.body = { code: 404, msg: 'fail', data: '404' };
			}
		} catch (err) {
			app.emit('error', err, ctx);
			const Status = ctx.status || 500;
			// 生产环境时500错误的详细错误内容不返回客户端，因为可能包含敏感信息
			let error =
				Status === 500 && app.config.env === 'prod'
					? 'Internal Server Error'
					: err.message;

			if (Status === 404 && error === 'Validation Failed') {
				if (err.errors && Array.isArray(err.errors)) {
					error = err.errors[0].err[0] ? err.errors[0].err[0] : '参数错误';
				}
			}
			ctx.body = { code: Status, msg: 'fail', data: error };
			ctx.status = Status;
		}
	};
};
